package com.jpa.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @Description 用户实体
 *
 * @author 堆堆堆
 * @date 2018年4月19日 下午12:25:41
 */
@Data
@Builder
@ToString(exclude = "cars")
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "t_user")
public class User implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 主键 id
	 */
	@Id
	// 定义主键生成策略，此处定义为自增长
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;

	/**
	 * 用户名
	 */
	private String userName;

	/**
	 * 简称
	 */
	private String shortName;

	/**
	 * 年龄
	 */
	private Integer age;

	/**
	 * 学科
	 */
	private String subject;

	/**
	 * 成绩
	 */
	private Double score;

	/**
	 * 生日
	 */
	private Date birthday;

	/**
	 * 车车
	 */
	// mappedBy：用于双向关联，表示该 User 类的 cars 字段放弃维护权，而将维护权交给了 Car 类的关联属性 User
	// mappedBy 不能和 @JoinColumn 共存
	@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
	@JsonIgnore
	private List<Car> cars;
}
